from datetime import date, timedelta

from rest_framework.response import Response
from rest_framework.views import APIView

from apps.users.models import User


class UserDailyActiveCountView(APIView):
    """获取当天登录过的活跃用户"""

    def get(self, request):
        # 获取当前日期
        now_date = date.today()
        # 获取活跃用户数量
        # last_login获取到的是个日期时间 X年X月X日 x时x分x秒
        # last_login__gte是django的一个方法，它会将日期时间转化为 日期 X年X月X日
        count = User.objects.filter(last_login__gte=now_date).count()
        # 返回数量
        return Response({"count": count, "date": now_date})


class UserDailyOrderCountView(APIView):
    """获取当天下单的用户量"""

    def get(self, request):
        # 获取当前日期
        now_date = date.today()
        # 获取当天下单的用户量
        count = User.objects.filter(orderinfo__create_time__gte=now_date).count()
        # 返回订单数量
        return Response({"count": count, "date": now_date})


class UserMonthCountView(APIView):
    """月增用户统计"""

    def get(self, request):
        # 获取当前日期
        now_date = date.today()
        # 获取一个月前的数据
        start_date = now_date - timedelta(days=30)
        # 创建空列表，用于保存每天的数量
        date_list = []

        for i in range(30):
            # 遍历获取当天日期
            index_date = start_date + timedelta(days=i)
            # 指定下一天的日期
            cur_date = start_date + timedelta(days=i + 1)

            # 查询日期，大于index_date，小于cur_date
            count = User.objects.filter(date_joined__gte=index_date, date_joined__lt=cur_date).count()

            date_list.append({
                "count": count,
                "date": index_date
            })

        # 返回数据
        return Response(date_list)
